// 309. 最佳买卖股票时机含冷冻期
// 给定一个整数数组prices，其中第  prices[i] 表示第 i 天的股票价格 。
//
// 设计一个算法计算出最大利润。在满足以下约束条件下，你可以尽可能地完成更多的交易（多次买卖一支股票）:
//
// 卖出股票后，你无法在第二天买入股票 (即冷冻期为 1 天)。
// 注意：你不能同时参与多笔交易（你必须在再次购买前出售掉之前的股票）。
/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function (prices) {
  const len = prices.length
  // dp[i][status] 表示第 i 天操作后，所获得的最大利润
  // status: 0 持股
  // status: 1 不持有股票且在冷冻期
  // status: 2 不持有股票且不在冷冻期
  const dp = new Array(len).fill(0).map(() => new Array(3).fill(0))

  dp[0][0] = -prices[0]

  for (let i = 1; i < len; i++) {
    // 持股
    dp[i][0] = Math.max(
      // 不操作，延续
      dp[i - 1][0],
      // 从之前不持股且不在冷冻期，今天买入
      dp[i - 1][2] - prices[i]
    )

    // 现在买入
    dp[i][1] = dp[i - 1][0] + prices[i]

    // 买入
    dp[i][2] = Math.max(
      dp[i - 1][1],
      dp[i - 1][2]
    )
  }

  return Math.max(...dp[len - 1])
}

console.log(
  maxProfit([1, 2, 3, 0, 2])
)









